package com.niiwoo.activity.stage.enums.goods;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class GoodsTypeStatusMapping {
	protected static final Map<GoodsTypeDicEnum, List<GiftStatusEnum>> MAPPING = new LinkedHashMap<>();
		static{// 有关使用状态：未使用、已使用、过期
					List<GiftStatusEnum> useStatus = Arrays.asList(//
							GiftStatusEnum.NOT_USE,// 10
							GiftStatusEnum.USED,// 20
							GiftStatusEnum.TIME_OUT// 40
							);

					// 仅使用状态
					List<GiftStatusEnum> onlyUsedStatus = Arrays.asList(//
							GiftStatusEnum.USED// 20
							);

					// 与返现有关的状态
					List<GiftStatusEnum> cashBackStatus = Arrays.asList(//
							GiftStatusEnum.NOT_USE,// 10
							GiftStatusEnum.WAITING_CASH_BACK, // 21
							GiftStatusEnum.CASH_BACKED,// 30
							GiftStatusEnum.TIME_OUT, // 40
							GiftStatusEnum.SYSTEM_GC// 51
							);
					// 有期限的发放状态
					List<GiftStatusEnum> sendStatus4Days = Arrays.asList(//
							GiftStatusEnum.WAITING_SEND,// 11
							GiftStatusEnum.SENDED, // 22
							GiftStatusEnum.TIME_OUT// 40
							);

					// 不会过期的发放状态
					List<GiftStatusEnum> sendStatus4Ever = Arrays.asList(//
							GiftStatusEnum.WAITING_SEND,// 11
							GiftStatusEnum.SENDED// 22
							);

					// 实物状态
					List<GiftStatusEnum> status4Shiwu = Arrays.asList(//
							GiftStatusEnum.WAITING_PROVIDE,// 12
							GiftStatusEnum.PROVIDED,// 23
							GiftStatusEnum.TIME_OUT,// 40
							GiftStatusEnum.SCENE_SEND// 52
							);

					// 担保理财金 100001
					MAPPING.put(GoodsTypeDicEnum.DANBAO_LCJ, useStatus);
					// 投资理财金 100002
					MAPPING.put(GoodsTypeDicEnum.TOUZI_LCJ, useStatus);
					// 投资加息券 100006
					MAPPING.put(GoodsTypeDicEnum.TOUZI_JXQ, useStatus);
					// 担保返现红包 100007
					MAPPING.put(GoodsTypeDicEnum.DANBAO_FXQ, cashBackStatus);
					// 投资返现红包 100008
					MAPPING.put(GoodsTypeDicEnum.TOUZI_FXQ, cashBackStatus);
					// 借款返现红包 100009
					MAPPING.put(GoodsTypeDicEnum.JIEKUAN_FXQ, cashBackStatus);
					// 提现红包 100010
					MAPPING.put(GoodsTypeDicEnum.TIXIAN_HB, useStatus);
					// 现金红包 100011
					MAPPING.put(GoodsTypeDicEnum.XIANJIN_HB, sendStatus4Days);

					// 积分 101004
					MAPPING.put(GoodsTypeDicEnum.JIFEN_KA, onlyUsedStatus);
					// 签到补签卡 101006
					MAPPING.put(GoodsTypeDicEnum.BUQIAN_KA, useStatus);
					// 抽奖卡 101007
					MAPPING.put(GoodsTypeDicEnum.CHOUJIANG_KA, useStatus);

					// 实物 102
					MAPPING.put(GoodsTypeDicEnum.SHIWU, status4Shiwu);

					//借款利率折扣券
					List<GiftStatusEnum>list=new ArrayList<>();
					list.add(GiftStatusEnum.NOT_USE);
					list.add(GiftStatusEnum.AREADY_USED);
					list.add(GiftStatusEnum.WAITING_REBATE);
					list.add(GiftStatusEnum.IN_REBATE);
					list.add(GiftStatusEnum.REBATE_BACKED);
					list.add(GiftStatusEnum.TIME_OUT);
					list.add(GiftStatusEnum.SYSTEM_GC);
					MAPPING.put(GoodsTypeDicEnum.JIEKUAN_LILV_ZKK, list);
				}

	/**
	 * 根据奖品类型的枚举获取对应的状态值
	 *
	 * @param type
	 * @return
	 */
	public static List<Integer> getStatusValueForType(GoodsTypeDicEnum type) {
		List<GiftStatusEnum> list = MAPPING.get(type);
		if (list == null) {
			return null;
		}
		List<Integer> status = new ArrayList<>();
		for (GiftStatusEnum statusEnum : list) {
			status.add(statusEnum.getStatus());
		}
		return status;
	}

	/**
	 * 根据奖品类型的枚举获取对应的状态描述
	 *
	 * @param type
	 * @return
	 */
	public static List<String> getStatusDescriptionForType(GoodsTypeDicEnum type) {
		List<GiftStatusEnum> list = MAPPING.get(type);
		if (list == null) {
			return null;
		}
		List<String> status = new ArrayList<>();
		for (GiftStatusEnum statusEnum : list) {
			status.add(statusEnum.getDesc());
		}
		return status;
	}




	public static JSONArray getStatusDescriptJSONArrayForType(GoodsTypeDicEnum type) {
		List<GiftStatusEnum> list = MAPPING.get(type);
		if (list == null) {
			return null;
		}
		JSONArray array = new JSONArray();
		for (GiftStatusEnum status : list) {
			array.add(new JSONObject().fluentPut("status", status.getStatus()).fluentPut("desc", status.getDesc()));
		}
		return array;
	}

	/**
	 * 将整个映射关系生成json
	 *
	 * @return
	 */
	public static JSONObject toAllMappingJSONObject() {
		JSONObject jsonObject = new JSONObject();
		for (GoodsTypeDicEnum type : MAPPING.keySet()) {
			jsonObject.put(String.valueOf(type.getId()), getStatusDescriptJSONArrayForType(type));
		}
		return jsonObject;
	}

	/**
	 * 根据奖品类型的枚举获取对应的状态枚举
	 *
	 * @param type
	 * @return
	 */
	public static List<GiftStatusEnum> getStatusForType(GoodsTypeDicEnum type) {
		List<GiftStatusEnum> list = MAPPING.get(type);
		if (list == null) {
			return null;
		}
		return list;
	}
}
